﻿using Microsoft.AspNetCore.Http;

namespace Sage.FreeSqlManager.Tenant
{
    /// <summary>
    /// 租户ID解析器委托 - 定义自定义租户ID解析的方法签名
    /// </summary>
    /// <param name="context">HTTP上下文</param>
    /// <returns>包含租户ID的异步任务</returns>
    public delegate ValueTask<long> TenantIdResolverDelegate(HttpContext context);

    /// <summary>
    /// 租户中间件选项 - 配置租户中间件的行为
    /// </summary>
    public sealed class TenantMiddlewareOptions
    {
        /// <summary>
        /// 是否为开发环境
        /// </summary>
        /// <remarks>
        /// 在开发环境中，如果没有找到有效的租户ID，将返回<see cref="DevDefaultTenantId"/>指定的默认租户ID
        /// </remarks>
        public bool IsDevelopment { get; init; } = false;

        /// <summary>
        /// 开发环境默认租户ID
        /// </summary>
        /// <remarks>
        /// 仅在<see cref="IsDevelopment"/>为true时有效
        /// </remarks>
        public long DevDefaultTenantId { get; init; } = default;

        /// <summary>
        /// 自定义租户ID解析器
        /// </summary>
        /// <remarks>
        /// 如果提供了自定义解析器，将优先使用它来解析租户ID；否则使用默认解析逻辑
        /// </remarks>
        public TenantIdResolverDelegate? TenantIdResolver { get; init; }
    }
}
